﻿/*******************************************************************************
 * Copyright @ 2017 YunSpace.Framework 版权所有
 * Author: GaoTang
 * Description: YunSpace 快速开发平台
 * Website：http://www.yunspace.com.cn
*********************************************************************************/
#region USING SYSTEM
using System.Linq;
using System.Collections.Generic;
using YunSpace.Data;
using YunSpace.Domain.Entity.MiniSite;
using YunSpace.Domain.IRepository.MiniSite;
using System;
#endregion

namespace YunSpace.Repository.MiniSite
{
    /// <summary>
    /// 定时任务
    /// </summary>
    public partial class SiteOrderRepository : RepositoryBase<SiteOrderEntity>, ISiteOrderRepository
    {
        /// <summary>
        /// 一、更新场地（空间）订单状态（0.未付订金; 1.已付订金; 2.等待确认;）为已超时（-1.未付订金超时;-2.已付订金超时;-3.等待确认超时;）
        /// 规则： 当前时间大于场地（空间）的开始时间
        /// </summary>
        public bool UpdateNotOutOfDateOrderStatus()
        {
            var result = false;
            using (var db = new RepositoryBase().BeginTrans())
            {
                var now = DateTime.Now;
                // 只针对于场地和空间订单
                string sqlStr = @"SELECT * FROM MiniSite_SiteOrder so 
                                 WHERE so.F_Type=2 AND so.F_Status in(0,1,2)";

                var orders = FindList(sqlStr);
                if (orders.Any())
                {
                    orders.ForEach(item => {
                        if (item.F_StartTime < now)
                        {
                            item.F_Status = -(item.F_Status + 1);
                            item.Modify(item.F_Id);
                            Update(item);
                        }
                    });
                }
                db.Commit();

                result = true;
            }
            return result;
        }

        /// <summary>
        /// 二、更新场地（空间）订单状态从待举办（4.待举办;）到已举办（5.已举办;）
        /// 规则： 当前时间大于场地（空间）的结束日期并且小于开始日期
        /// </summary>
        public bool UpdateOrderByBeging()
        {
            var result = false;
            using (var db = new RepositoryBase().BeginTrans())
            {
                var now = DateTime.Now.Date;
                // 只针对于场地和空间订单
                string sqlStr = @"SELECT * FROM MiniSite_SiteOrder so 
                                 WHERE so.F_Type=2 AND so.F_Status = 4";

                var orders = FindList(sqlStr);
                if (orders.Any())
                {
                    orders.ForEach(item => {
                        if (now >= item.F_StartTime && now <= item.F_EndTime)
                        {
                            item.F_Status = 5;
                            item.Modify(item.F_Id);
                            Update(item);
                        }
                    });
                }
                db.Commit();

                result = true;
            }
            return result;
        }

        /// <summary>
        /// 三、更新场地（空间）订单状态从已举办（5.已举办;）到结束（8.结束;）
        /// 规则： 场地（空间）的结束日期超过当前时间3天以上
        /// </summary>
        public bool UpdateOrderByEnd()
        {
            var result = false;
            using (var db = new RepositoryBase().BeginTrans())
            {
                var now = DateTime.Now.Date.AddDays(-3);
                // 只针对于场地和空间订单
                string sqlStr = @"SELECT * FROM MiniSite_SiteOrder so 
                                 WHERE so.F_Type=2 AND so.F_Status = 5";

                var orders = FindList(sqlStr);
                if (orders.Any())
                {
                    orders.ForEach(item => {
                        if (now >= item.F_StartTime && now <= item.F_EndTime)
                        {
                            item.F_Status = 8;
                            item.Modify(item.F_Id);
                            Update(item);
                        }
                    });
                }
                db.Commit();

                result = true;
            }
            return result;
        }

        /// <summary>
        /// 获取待发送短信的场地订单
        /// </summary>
        /// <returns></returns>
        public List<SiteOrderEntity> GetWatchSmsSiteOrder() {
            // 只针对于场地和空间订单
            string sqlStr = @"SELECT * FROM MiniSite_SiteOrder so 
                                 WHERE so.F_Type=2 AND so.F_Status in(0,1,2)";

            var result = FindList(sqlStr);

            return result;
        }

    }
}